#include "ModRunVisitor.h"
#include <QDebug>

#include "../Output/FactoryOutput.h"

#include "Gof23/Gof_Adapter/MoveOld.h"
#include "Gof23/Gof_Adapter/MoveAdapter.h"

//访问者模式的ModRun（Visitor）;
ModRunVisitor::ModRunVisitor()
{
    //模式名称;
    m_strModelName = "访问者模式（Visitor）;";
    //模式描述;
    m_strModelDesc = "访问者模式：将数据结构与数据操作分离，通过定义一个访问者对象，\n"
                     "来实现对数据结构中各个元素的访问和处理，从而达到解耦和灵活操作的目的。\n"
                     "\n"
                     ;
}

//初始化显示模式;
void ModRunVisitor::InitDisplay()
{
    qDebug() << m_strModelName;
    std::shared_ptr<IOutput> pOutPut = FactoryOutput::GetInstance()->CreateDescOutput();
    if (pOutPut)
    {
        std::initializer_list<QString> outList{ m_strModelName,m_strModelDesc};
        pOutPut->OutPut(outList);
    }
}

//返回模式类型;
EnumModRun ModRunVisitor::GetEnum()
{
    return emModRunVisitor;
}

//运行模式;
void ModRunVisitor::ModRun()
{
    std::shared_ptr<IOutput> pOutPut = FactoryOutput::GetInstance()->CreateRunOutput();
    if (pOutPut)
    {
        std::initializer_list<QString> outListStart{ "========访问者模式（Visitor） start:=======" };
        std::initializer_list<QString> outListEnd{ "========访问者模式（Visitor） end:=======" };
        pOutPut->OutPut(outListStart);

        //责任链模式（Chain）;
        
        
        pOutPut->OutPut(outListEnd);
    }

}

InterFaceModRun* ModRunVisitor::CreateMe()
{
    return new ModRunVisitor();
}
